﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanLyBanLe.Admin;
using DLL;
using BLL;
using Logging;

namespace QuanLyBanLe
{
    public partial class FormProductType : Form
    {
        private ProductTypeService m_ProductTypeService;
        private int m_PreviousRow = -1;
        private bool isDuplicated;
        private bool isError;
        private bool m_DataChanged;
        private bool m_LoadCompleted;

        public FormProductType()
        {
            InitializeComponent();
            m_DataChanged = false;
            m_LoadCompleted = false;
            isError = false;
            isDuplicated = false;
            m_ProductTypeService = new ProductTypeService();
        }


        private void BindData()
        {
            IList<ProductType> producers = m_ProductTypeService.GetProductTypes();
            if (producers.Count > 0)
            {
                for (int i = 0; i < producers.Count; i++)
                {
                    var producer = producers[i];
                    dtgProductType.Rows.Add(i + 1, producer.Id, producer.Name);
                }
            }
            m_LoadCompleted = true;
        }

        private void dtgProductType_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int rowIndex = e.RowIndex;
            var rows = dtgProductType.Rows;
            if (rowIndex != -1 && !dtgProductType.CurrentRow.IsNewRow)
            {
                DialogResult dialogResult = MessageBox.Show("Bạn có muốn xóa không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.Yes)
                {
                    try
                    {
                        int id = Convert.ToInt32(dtgProductType["colId", e.RowIndex].Value);
                        var check = m_ProductTypeService.DeleteProductType(id);
                        if (check)
                        {
                            rows.RemoveAt(rowIndex);
                            MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK);
                        }
                        else
                        {
                            MessageBox.Show("Không thể xóa khách hàng này vì đang có sản phẩm sử dụng loại hàng này", "Thông báo", MessageBoxButtons.OK);
                        }
                    }
                    catch (Exception ex)
                    {
                        MyLogger.LogException("Error in FormProductType : ", ex);
                        MessageBox.Show("Có lỗi xảy ra, không xóa được loại hàng ");
                    }
                }
            }
        }

        private void dtgProductType_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            isError = false;
            if (dtgProductType["colName", e.RowIndex].Value == null)
            {
                dtgProductType["colName", e.RowIndex].ErrorText = "Vui lòng điền thông tin";
                isError = true;
            }
        }

        private void dtgProductType_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            string value = e.FormattedValue.ToString();
            if (isDuplicated)
            {
                isDuplicated = false;
            }
            for (int i = 0; i < dtgProductType.Rows.Count - 1; i++)
            {
                if (dtgProductType["colName", i].Value != null && i != e.RowIndex && value == dtgProductType["colName", i].Value.ToString())
                {
                    isDuplicated = true;
                    break;
                }
            }

            if (isDuplicated)
            {
                dtgProductType["colName", e.RowIndex].ErrorText = "Trùng Tên";
            }
            else
            {
                dtgProductType["colName", e.RowIndex].ErrorText = "";
            }
        }

        private void dtgProductType_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (m_LoadCompleted && m_DataChanged)
            {
                for (int i = 0; i < dtgProductType.Rows.Count - 1; i++)
                {
                    dtgProductType["colRowNumber", i].Value = i + 1;
                }
                if (!isDuplicated && !isError)
                {
                    AddOrUpdateProductType();
                }
                m_DataChanged = false;
            }
            else
            {
                m_DataChanged = false;
            }
        }

        private void AddOrUpdateProductType()
        {
            try
            {
                dtgProductType["colName", m_PreviousRow].ErrorText = "";
                //Add or Update Name
                var dataRow = dtgProductType["colId", m_PreviousRow].Value;
                if (dataRow == null)
                {
                    string name = dtgProductType["colName", m_PreviousRow].Value.ToString();
                    ProductType productType = new ProductType()
                    {
                        Id = 0,
                        Name = name,
                        IsDeleted = false
                    };
                    m_ProductTypeService.AddProductType(productType);
                    dtgProductType["colId", m_PreviousRow].Value = productType.Id;
                }
                else
                {
                    var collection = dtgProductType.Rows[m_PreviousRow];
                    int id = Convert.ToInt32(collection.Cells["colId"].Value);
                    string name = Convert.ToString(collection.Cells["colName"].Value);
                    m_ProductTypeService.UpdateProductType(new ProductType() { Id = id, Name = name });
                }
            }
            catch (Exception ex)
            {
                MyLogger.LogException("Error in FormProductType : ", ex);
                MessageBox.Show("Có lỗi xảy ra, không thêm hay cập nhật được loại hàng");
            }
        }


        private void FormProductType_Load(object sender, EventArgs e)
        {
            BindData();
            this.Text += FormMain.GetShopInfo();
        }

        private void dtgProductType_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == dtgProductType.Columns["colDelete"].Index)
            {
                int rowIndex = e.RowIndex;
                var rows = dtgProductType.Rows;
                if (rowIndex != -1 && !dtgProductType.CurrentRow.IsNewRow)
                {
                    DialogResult dialogResult = MessageBox.Show("Bạn có muốn xóa không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialogResult == DialogResult.Yes)
                    {
                        if (dtgProductType["colId", e.RowIndex].Value == null)
                        {
                            rows.RemoveAt(rowIndex);
                            MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK);
                        }
                        else
                        {
                            int id = Convert.ToInt32(dtgProductType["colId", e.RowIndex].Value);
                            var check = m_ProductTypeService.DeleteProductType(id);
                            if (check)
                            {
                                rows.RemoveAt(rowIndex);
                                MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK);
                            }
                            else
                            {
                                MessageBox.Show("Không thể xóa khách hàng này vì đang có sản phẩm sử dụng nhà sản xuất này", "Thông báo", MessageBoxButtons.OK);
                            }
                        }
                    }
                }
            }

        }

        private void dtgProductType_RowLeave(object sender, DataGridViewCellEventArgs e)
        {
            if (m_LoadCompleted)
            {
                m_PreviousRow = e.RowIndex;
            }
        }

        private void dtgProductType_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (m_LoadCompleted)
            {
                m_DataChanged = true;
            }
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            if (m_DataChanged && !isError && !isDuplicated)
            {
                DialogResult dialogResult = MessageBox.Show("Dữ liệu thay đổi bạn có muốn lưu lại không ?", "Thông báo", MessageBoxButtons.YesNo);
                if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                {
                    AddOrUpdateProductType();
                }
            }
            base.OnClosing(e);
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
